package logica;

import java.io.*;
import java.util.Random;

public class Mappa {
	
	public static final String nomefile = "Mappa.txt";
	public static final int RIGHE_MAPPA = 40;
	public static final int COLONNE_MAPPA = 40;
	public static boolean SCELGO_MAPPA_DA_FILE = true;
	public static final char CODICE_ACQUA = 'a';
	public static final char CODICE_TERRA_SEMPLICE = 't';
	public static final char CODICE_TERRA_VEGETAZIONE = 'v';
	public static final char CODICE_TERRA_CAROGNA = 'c';
	
	private char[][] caselleInChar;
	private Casella[][] caselle;
	
	public Mappa(){
		if(SCELGO_MAPPA_DA_FILE==true)
			estraiMappaCaratteriDaFile();
		else
			creaMappaCaratteriCasuale();
		creaCaselleDaChar();
	}
	
	//---------GETTERS AND SETTERS------------------------------------------
	
	public Casella[][] getCaselle() {
		return caselle;
	}

	public void setCaselle(Casella[][] caselle) {
		this.caselle = caselle;
	}
	
	public char[][] getCaselleInChar() {
		return caselleInChar;
	}

	public void setCaselleInChar(char[][] caselleInChar) {
		this.caselleInChar = caselleInChar;
	}

	//---------METODI-------------------------------------------------------
	
	//estrae dal file la mappa in forma di matrice di caratteri
	private void estraiMappaCaratteriDaFile(){
		char[][] MatriceMappaChar = new char [RIGHE_MAPPA][COLONNE_MAPPA];
		int next;
		char nextc;
		
		try{
			FileReader cursore= new FileReader(nomefile);
			for(int i=0;i<RIGHE_MAPPA;i++){
				if(i>0){
					cursore.skip(2);//per saltare i caratteri \n e \r presenti alla fine di ogni riga
				}
				for(int j=0;j<COLONNE_MAPPA;j++){
					next=cursore.read();
					nextc=(char) next; 
					MatriceMappaChar[i][j]=nextc;
				}
			}
			cursore.close();
		}
		catch(FileNotFoundException e){
			System.out.println("File non trovato");	  
		}
		catch (IOException e){
			System.out.println("Errore in lettura del file");
		}
		caselleInChar=MatriceMappaChar;
	}
	
	//crea casualmente la mappa in forma di matrice di caratteri
	private void creaMappaCaratteriCasuale(){
		char[][] MatriceMappaChar = new char [RIGHE_MAPPA][COLONNE_MAPPA];
		//----------------------
		//ANCORA DA IMPLEMENTARE
		//----------------------
		caselleInChar=MatriceMappaChar;
	}
	
	//trasforma la matrice di caratteri in matrice di caselle
	private void creaCaselleDaChar(){
		double numeroCasuale;
		Random generatore = new Random();
		Casella[][] caselleCreate = new Casella[RIGHE_MAPPA][COLONNE_MAPPA];
		for(int i=0;i<RIGHE_MAPPA;i++){
			for(int j=0;j<COLONNE_MAPPA;j++){
				if(caselleInChar[i][j]==CODICE_ACQUA){
					caselleCreate[i][j]= new Acqua();
				}
				if(caselleInChar[i][j]==CODICE_TERRA_SEMPLICE){
					caselleCreate[i][j]= new TerraSemplice();
				}
				if(caselleInChar[i][j]==CODICE_TERRA_VEGETAZIONE){
					numeroCasuale=generatore.nextDouble();
					numeroCasuale=250+((numeroCasuale-0.5)*250*0.4*2)+0.5; // 250+-40%
					caselleCreate[i][j]= new TerraVegetazione((int)numeroCasuale);
				}
				if(caselleInChar[i][j]==CODICE_TERRA_CAROGNA){
					numeroCasuale=generatore.nextDouble();
					numeroCasuale=500+((numeroCasuale-0.5)*500*0.3*2)+0.5; // 500+-30%
					caselleCreate[i][j]= new TerraCarogna((int)numeroCasuale);
				}
			}
		}
		caselle=caselleCreate;
	}
	
}